@SuppressWarnings("serial")
class LiczbaException extends Exception
{
        LiczbaException(String komunikat)
        {
                super(komunikat);
        }
}
public class Liczba
{
        private int n;
       
        Liczba() throws LiczbaException{}  
       
        Liczba(int n)
        {
                this.n=n;
        }
       
  Liczba(String n, int podstawa) throws LiczbaException
        {
                int liczba=0;
                int l=n.length()-1;
                for (int i=l ; i>=0; i--)
                        try
                        {
                                liczba+=pobierzWartosc(n.charAt(i),podstawa)*(int)(Math.pow((double)podstawa, (double)(l-i)));
                        }
                        catch (LiczbaException e)
                        {
                                throw e;
                        }
                this.n=liczba;
        }
       
        public static int pobierzWartosc (char znak,int podstawa) throws LiczbaException
        {
                int tmp;
                switch (znak)
                {
                        case '0': tmp=0; break;
                        case '1': tmp=1; break;
                        case '2': tmp=2; break;
                        case '3': tmp=3; break;
                        case '4': tmp=4; break;
                        case '5': tmp=5; break;
                        case '6': tmp=6; break;
                        case '7': tmp=7; break;
                        case '8': tmp=8; break;
                        case '9': tmp=9; break;
                        case 'A': tmp=10; break;
                        case 'B': tmp=11; break;
                        case 'C': tmp=12; break;
                        case 'D': tmp=13; break;
                        case 'E': tmp=14; break;
                        case 'F': tmp=15; break;
                        case 'G': tmp=16; break;
                        default : throw new LiczbaException("niepoprawna liczba");
                }
                if (tmp>=podstawa)
                {
                        throw new LiczbaException("niepoprawna liczba");
                }
                if(podstawa<2 || podstawa>17)
                        throw new LiczbaException("niepoprawna podstawa");
                return tmp;
        }
        public String odwroc (String ciag)
        {
                String tmp="";
                for (int i=ciag.length()-1; i>=0; i--)
                        tmp+=ciag.charAt(i);
                return tmp;
        }
        public static char pobierzZnak(int liczba) throws LiczbaException
        {
                switch (liczba)
                {
                        case 10: return 'A';
                        case 11: return 'B';
                        case 12: return 'C';
                        case 13: return 'D';
                        case 14: return 'E';
                        case 15: return 'F';
                        case 16: return 'G';
                        default: throw new LiczbaException("niepoprawna podstawa");
                }
               
        }
       
        public String zapis(int podstawa) throws LiczbaException
        {
                sprawdzPodstawe(podstawa);
                if (podstawa > 17 || podstawa < 2)
                        throw new LiczbaException("niepoprawna podstawa");
                String liczba="";
                int tmpLiczba = this.n;
                int znak;
               
                while (tmpLiczba>0)
                {      
                        znak=tmpLiczba % podstawa;
                        if (znak < 10)
                                liczba += znak;
                        else
                        {
                                try
                                {
                                        liczba +=pobierzZnak(znak);
                                }
                                catch(LiczbaException e)
                                {
                                        throw e;
                                }
                        }
                        tmpLiczba/=podstawa;
                }
                return odwroc(liczba);
        }
        public static boolean sprawdzPodstawe(int podstawa)
        {
                boolean check = true;
                if(podstawa<2 || podstawa>17)
                check = false;
                return check;
        }
}
